package edu.biwu;

import jakarta.servlet.*;
import java.io.IOException;

/**
 *  Servlet的生命周期
 *      1.首次访问ServletDemo02时，会进行以下操作
 *          a.Tomcat底层会开启线程处理当前请求
 *          b.利用反射技术创建ServletDemo02对象(会调用ServletDemo02的构造方法)
 *          c.利用ServletDemo02对象调用init方法进行初始化
 *          d.调用service方法处理用户的请求
 *      2.再次进行访问时，会进行以下操作
 *          a.Tomcat底层会开启线程处理当前请求
 *          b.此时不再利用反射技术创建ServletDemo02的对象,也不再调用init方法初始化
 *              可以直接调用service方法处理用户的请求
 *      3.当tomcat被关闭的时候,tomcat会调用destroy()方法来销毁ServletDemo02
 *    注意：
 *      a.每次请求都是用的同一个servlet对象
 *      b.每次请求servlet，Tomcat都会开启一个线程进行处理
 *      c.Tomcat使用多线程处理用户请求,而这些线程使用的都是同一个Servlet对象
 *        有可能产生多线程操作共享数据的安全性问题,不推荐在Servlet中使用成员变量
 *
 */
public class ServletDemo02 implements Servlet {
    public ServletDemo02() {
        System.out.println("ServletDemo02的构造方法被调用..." + this);
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("ServletDemo02的init方法被调用..." + this);
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("ServletDemo02的service方法被调用..." + this);
    }

    @Override
    public String getServletInfo() {
        return "";
    }

    @Override
    public void destroy() {
        System.out.println("ServletDemo02的destroy方法被调用..." + this);
    }
}
